package com.dhcc.countlineusers.listener;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import com.dhcc.countlineusers.entity.OnlineUser;
import com.dhcc.countlineusers.utils.OnlineUserListUtils;

/**
 * @description ：统计网站(应用)当前在线人数
 * @date ：2016年11月29日 下午6:48:06
 * @author ：WangYG
 */
public class CountOnlineUsersListener implements HttpSessionListener {
    private int userCountNum = 0;
    
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        userCountNum++;
        httpSessionEvent.getSession().getServletContext().setAttribute("userCountNum", userCountNum);
    }

    @Override
    @SuppressWarnings("unchecked") 
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        //1.人数减一
        userCountNum--;
        ServletContext  servletContext = httpSessionEvent.getSession().getServletContext();
        servletContext.setAttribute("userCountNum", userCountNum);
        //2.在线用户列表中删除该用户
        List<OnlineUser> onlineUserList = (ArrayList<OnlineUser>)servletContext.getAttribute("onlineUserList");
        if(null != onlineUserList && !onlineUserList.isEmpty()){//判断在线用户列表是否为空，不为空的情况下进行下面的删除在线用户操作
            String sessionId = httpSessionEvent.getSession().getId();
            Object obj = OnlineUserListUtils.findUserBySessionId(onlineUserList, sessionId);
            if(null != obj){//判断是否是当前在线用户，是的情况下删除
                onlineUserList.remove((OnlineUser)obj);
                servletContext.setAttribute("onlineUserList", onlineUserList);//加入到ServletContext全局对象中
            }
        }
    }
}
